package com.hzy.fivepalace.common.util;

import java.util.HashMap;
import java.util.Map;

/**
 * 响应操作结果
 *
 * <pre>
 *  {
 *      errno： 错误码，
 *      errmsg：错误消息，
 *      data：  响应数据
 *  }
 * </pre>
 *
 * <p>
 * 错误码：
 * <ul>
 * <li>0，成功；
 * <li>4xx，前端错误，说明前端开发者需要重新了解后端接口使用规范：
 * <ul>
 * <li>401，参数错误，即前端没有传递后端需要的参数；
 * <li>402，参数值错误，即前端传递的参数值不符合后端接收范围。
 * </ul>
 * <li>5xx，后端错误，除501外，说明后端开发者应该继续优化代码，尽量避免返回后端错误码：
 * <ul>
 * <li>999，验证失败，即后端要求用户登录；
 * <li>502，系统内部错误，即没有合适命名的后端内部错误；
 * <li>503，业务不支持，即后端虽然定义了接口，但是还没有实现功能；
 * <li>504，更新数据失效，即后端采用了乐观锁更新，而并发更新时存在数据更新失效；
 * <li>505，更新数据失败，即后端数据库更新失败（正常情况应该更新成功）。
 * </ul>
 * <li>6xx，小商城后端业务错误码， 具体见Dts-admin-api模块的AdminResponseCode。
 * <li>7xx，管理后台后端业务错误码， 具体见Dts-wx-api模块的WxResponseCode。
 * </ul>
 */
public class ResponseUtil {

	/**
	 * 成功状态码
	 */
	public final static int SUCCESS_CODE=0;

	/**
	 * 失败状态码
	 */
	public final static int FAIL_CODE=-1;



	public static Object ok() {
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", SUCCESS_CODE);
		obj.put("msg", "成功");
		return obj;
	}

	public static Object ok(Object data) {
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", SUCCESS_CODE);
		obj.put("msg", "成功");
		obj.put("data", data);
		return obj;
	}

	public static Object ok(String errmsg, Object data) {
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", SUCCESS_CODE);
		obj.put("msg", errmsg);
		obj.put("data", data);
		return obj;
	}

	public static Object fail() {
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", FAIL_CODE);
		obj.put("msg", "失败");
		return obj;
	}

	/**
	 * 返回需要单独结算消息
	 * @return
	 */
	public static Object groupBySettlement(Object data) {
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", 900);
		obj.put("msg", "请分开结算以下商品");
		obj.put("data", data);
		return obj;
	}

	public static Object fail(int errno, String errmsg) {
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", errno);
		obj.put("msg", errmsg);
		return obj;
	}


	public static Object failData(Object data) {
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", FAIL_CODE);
		obj.put("msg", "失败");
		obj.put("data", data);
		return obj;
	}


	public static Object fail(int errno, String errmsg, Object data) {
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", errno);
		obj.put("msg", errmsg);
		obj.put("data", data);
		return obj;
	}

	public static Object fail(String errmsg) {
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", FAIL_CODE);
		obj.put("msg", errmsg);
		return obj;
	}

	/**
	 * 返回操作频繁消息
	 *
	 * @return
	 */
	public static Object frequent() {
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", 305);
		obj.put("msg", "请求频繁，请稍后再试");
		return obj;
	}

	/**
	 * 返回操作频繁消息
	 *
	 * @return
	 */
	public static Object frequent(String msg) {
		Map<String, Object> obj = new HashMap<String, Object>();
		obj.put("code", 305);
		obj.put("msg", msg);
		return obj;
	}

	public static Object badArgument() {
		return fail(401, "参数不对");
	}

	public static Object badArgument(String msg) {
		return fail(401, msg);
	}

	public static Object badArgument(String msg, Object data) {
		return fail(401, msg, data);
	}

	public static Object badArgumentValue() {
		return fail(402, "参数值不对");
	}

	public static Object unlogin() {
		return fail(999, "请登录");
	}

	public static Object unlogin(String msg) {
		return fail(999, msg);
	}

	public static Object serious() {
		return fail(502, "系统内部错误");
	}

	public static Object serious(String msg) {
		return fail(502, msg);
	}

	public static Object unsupport() {
		return fail(503, "业务不支持");
	}

	public static Object updatedDateExpired() {
		return fail(504, "更新数据已经失效");
	}

	public static Object updatedDataFailed() {
		return fail(505, "更新数据失败");
	}

	public static Object unauthz() {
		return fail(506, "无操作权限");
	}

	public static Object tokenExpired() {
		return fail(507, "下单超时");
	}
}
